package com.tuzhi.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class CollectionsTzUtil {
    /**
     * 从二个集合中，取出要删除的项
     *
     * @param oldDatas 数据库中的记录集合
     * @param newDatas 新提交的记录集合
     * @param <E>
     * @return 返回要删除的集合
     */
    public static <E> Collection<E> getAddItem(Collection<E> oldDatas, Collection<E> newDatas) {
        if (newDatas == null || newDatas.isEmpty()) {
            return new ArrayList<E>();
        }
        //只要提交过来的集合不包含在旧的记录中的就是新增项
        Predicate<E> predicate = item -> !oldDatas.contains(item);
        Collection<E> addItem = newDatas.stream().filter(predicate).collect(Collectors.toList());
        return addItem;
    }

    /**
     * 从二个集合中，取出要删除的项
     *
     * @param oldDatas 数据库中的记录集合
     * @param newDatas 新提交的记录集合
     * @param <E>
     * @return 返回要删除的集合
     */
    public static <E> Collection<E> getDeleteItem(Collection<E> oldDatas, Collection<E> newDatas) {
        if (oldDatas == null || oldDatas.isEmpty()) {
            return new ArrayList<E>();
        }
        Predicate<E> predicate = item -> !newDatas.contains(item);
        Collection<E> delItem = oldDatas.stream().filter(predicate).collect(Collectors.toList());
        return delItem;
    }

    public static void main(String[] args) {
        List<Long> oldDatas=new ArrayList<>();
        oldDatas.add(1L);
        oldDatas.add(2L);
        oldDatas.add(3L);
        List<Long> newDatas=new ArrayList<>();
        newDatas.add(2L);
        newDatas.add(3L);
        newDatas.add(4L);
        Collection<Long> addItem=getAddItem(oldDatas,newDatas);
        System.out.println(addItem);

        Collection<Long> deleteItem=getDeleteItem(oldDatas,newDatas);
        System.out.println(deleteItem);

    }
}
